/**
 * 数据库迁移脚本：添加用户禁言字段
 * 执行命令：node scripts/add-chat-banned-field.js
 */

const { prisma } = require('../config/prisma');

async function addChatBannedField() {
  try {
    console.log('开始执行数据库迁移：添加 chat_banned 字段...');

    // 执行原生SQL来添加字段
    await prisma.$executeRaw`
      ALTER TABLE users 
      ADD COLUMN chat_banned TINYINT(1) NOT NULL DEFAULT 0 
      COMMENT '是否禁止发言 (0: 允许发言, 1: 禁止发言)'
    `;

    console.log('✅ 成功添加 chat_banned 字段');

    // 添加索引
    await prisma.$executeRaw`
      ALTER TABLE users 
      ADD INDEX idx_chat_banned (chat_banned)
    `;

    console.log('✅ 成功添加索引 idx_chat_banned');

    // 验证字段是否添加成功
    const result = await prisma.$queryRaw`
      DESCRIBE users
    `;

    console.log('✅ 数据库迁移完成！');
    console.log('users表结构：');
    console.table(result);

  } catch (error) {
    if (error.message.includes('Duplicate column name')) {
      console.log('⚠️  字段 chat_banned 已存在，跳过添加');
    } else if (error.message.includes('Duplicate key name')) {
      console.log('⚠️  索引 idx_chat_banned 已存在，跳过添加');
    } else {
      console.error('❌ 数据库迁移失败：', error);
      throw error;
    }
  } finally {
    await prisma.$disconnect();
  }
}

// 执行迁移
if (require.main === module) {
  addChatBannedField()
    .then(() => {
      console.log('🎉 迁移脚本执行完成');
      process.exit(0);
    })
    .catch((error) => {
      console.error('💥 迁移脚本执行失败：', error);
      process.exit(1);
    });
}

module.exports = { addChatBannedField };
